package com.itheima.edu.info.manager.service;

import com.itheima.edu.info.manager.dao.TeacherDao;
import com.itheima.edu.info.manager.domain.Teacher;
import com.itheima.edu.info.manager.factory.TeacherFactory;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Properties;

public class TeacherService {
    //创建持久层对象
    private static TeacherDao dao = TeacherFactory.getTeacherDao();

    //业务层登录功能实现
    public boolean login(String name, String password) {
        //使用标记位思想,默认登录失败
        boolean flag = false;
        //以集合的形式获取文件中老师的账户信息
        Properties prop = dao.selectAccounts();
        //判断账户信息是否存在有与用户登录的一致
        if (prop != null && prop.containsKey(name) && password.equals(prop.getProperty(name))) {
            flag = true;
        }
        //返回登录结果给客服
        return flag;
    }

    //功能:判断参数id是否存在集合中
    public boolean isExists(String id) {
        //使用标记位思想,默认不存在
        boolean flag = false;
        //获取所有老师信息
        ArrayList<Teacher> teachers = dao.selectTeacher();
        //遍历集合,查找id相同的对象
        for (Teacher teacher : teachers) {
            if (teacher != null && id.equals(teacher.getSid())) {
                //找到了相同id的对象,返回true
                flag = true;
            }
        }
        //返回结果
        return flag;
    }

    //业务层添加老师的方法
    public boolean addTeacher(Teacher tea) {
        //使用标记位思想
        boolean flag = false;
        //添加前老师数量
        int start = dao.selectTeacher().size();
        //调用库管添加老师对象
        dao.addTeacher(tea);
        //添加后老师数量
        int end = dao.selectTeacher().size();
        //判断是否添加成功
        if ((end - start) == 1) {
            flag = true;
        }
        //返回结果
        return flag;
    }

    //业务层:查找所有老师信息
    public ArrayList<Teacher> selectTeacher() {
        //使用标记位思想
        boolean flag = false;
        //通过dao获取集合
        ArrayList<Teacher> list = dao.selectTeacher();
        //对获取的进行处理
        if (list == null) {
            return null;
        }
        for (Teacher teacher : list) {
            if (teacher != null) {
                flag = true;
            }
        }
        //对集合进行排序
        if (flag) {
            Collections.sort(list, (tea1, tea2) -> {
                if (tea1 != null & tea2 != null) {
                    return tea1.getSid().compareTo(tea2.getSid());
                } else {
                    return 0;
                }
            });
            return list;
        }
        return null;
    }

    //业务层的修改功能
    public boolean updateTeacher(Teacher tea) {
        //使用标记位思想
        boolean falg = false;
        //获得修改的教师id
        String id = tea.getSid();
        //获得同一个id在集合中的索引值
        int index = byIdGetIndex(id);
        //修改指定索引位置的教师信息
        return dao.updateTeacher(index, tea);
    }

    //根据教师id找到集合中对应的元素的索引值
    private int byIdGetIndex(String id) {
        //使用标记位思想
        int index = -1;
        //遍历集合找到id相同的元素的索引
        ArrayList<Teacher> list = dao.selectTeacher();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) != null && id.equals(list.get(i).getSid())) {
                index = i;
            }
        }
        //返回结果
        return index;


    }

    //业务层的删除功能
    public boolean deleteTeacher(String id) {
        //使用标记位思想
        boolean flag = false;
        //获得同一个id在集合中的索引值
        int index = byIdGetIndex(id);
        //删除前老师数量
        int start = dao.selectTeacher().size();
        //删除指定索引位置的教师信息
        dao.deleteTeacher(index);
        //删除后老师数量
        int end = dao.selectTeacher().size();
        //判断是否添加成功
        if ((end - start) == -1) {
            flag = true;
        }
        //返回删除结果
        return flag;
    }
}
